home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 003 / analysis.bas < prev    next >
BASIC Source File  |  1985-06-03  |  9KB  |  351 lines

  1. 100 REM -------------------------
  2. 110 N$= "DATA ANALYSIS PROGRAMS"
  3. 120 REM -------------------------
  4. 130 OPTION BASE 1
  5. 140 DIM P(80),R(80),D(80)
  6. 150 GOSUB 6200
  7. 160 REM SET UP MENU
  8. 170 X$(1)="INPUT DATA"
  9. 180 X$(2)="PLOT DATA"
  10. 190 X$(3)="MEAN AND STANDARD DEVIATION"
  11. 200 X$(4)="3-POINT MOVING AVERAGE"
  12. 210 X$(5)="WEIGHTED MOVING AVERAGE"
  13. 220 X$(6)="4-POINT CENTERED AVERAGE"
  14. 230 X$(7)="LINEAR REGRESSION"
  15. 240 N=7 : GOSUB 7000
  16. 250 ON X GOSUB 690,920,1140,1360,1560,1760,1960
  17. 260 GOTO 150
  18. 270 REM --------------------------
  19. 280 REM DRAW AXES
  20. 290 REM --------------------------
  21. 300 CLS
  22. 310 FOR I=1 TO 21
  23. 320   LOCATE I,6 : PRINT " I"
  24. 330 NEXT I
  25. 340 FOR I=1 TO 16 STEP 5
  26. 350  LOCATE I,6 : PRINT"-"
  27. 360  LOCATE I,1
  28. 365  PRINT USING "####"; MX-(MX-MN)/4*(I-1)/5
  29. 370 NEXT I
  30. 380 LOCATE 21,8
  31. 390 FOR I= 1 TO 32
  32. 400   PRINT "-";
  33. 410 NEXT I
  34. 420 FOR I=8 TO 38 STEP 5
  35. 430   LOCATE 21,I : PRINT "I";
  36. 440   LOCATE 22,I-1 : PRINT I-7
  37. 450 NEXT I
  38. 460 RETURN
  39. 470 REM ----------------------------
  40. 480 REM SCALE DATA AND PLOT IT
  41. 490 REM ----------------------------
  42. 500 FOR I= 1 TO ND
  43. 510   P1=21-INT(20*(D(I)-MN)/(MX-MN))
  44. 520   P2=21-INT(20*(R(I)-MN)/(MX-MN))
  45. 530 IF CH$ <> "I" THEN 570
  46. 540   IF P1 > 21 OR P1 < 1  THEN GOTO 670
  47. 550   LOCATE P1,I+8 : PRINT "*"
  48. 560   GOTO 650
  49. 570 IF CH$ <> "R" THEN 610
  50. 580   IF P2 > 21 OR P2 < 1  THEN GOTO 670
  51. 590   LOCATE P2,I+8 : PRINT "+"
  52. 600   GOTO 650
  53. 610 REM MUST BE BOTH PLOTS
  54. 620   IF P1 > 21 OR P1 < 1 OR P2 > 21 OR P2 < 1 THEN 670
  55. 630   LOCATE P1,I+8 : PRINT "*"
  56. 640   LOCATE P2,I+8 : PRINT "+"
  57. 650 NEXT I
  58. 660 RETURN
  59. 670 ERF=1 : RETURN
  60. 680 RETURN
  61. 690 REM ---------------------------
  62. 700 REM        "INPUT DATA"
  63. 710 REM ---------------------------
  64. 720 REM 80 DATA VALUES
  65. 730 GOSUB 6200
  66. 740 Q1$="TYPE IN DATA VALUES IN ORDER"
  67. 750 Q2$="TYPE D WHEN DONE"
  68. 760 Q3$=""    : GOSUB 5000
  69. 770 ND=0
  70. 780 J=6
  71. 790 FOR I= 1 TO 80
  72. 800   LOCATE J,10
  73. 810   PRINT "                "
  74. 820   LOCATE J,5
  75. 830   PRINT "VALUE ";I; TAB(20);
  76. 840   INPUT D$
  77. 850   IF D$="D" OR D$="d" THEN 910
  78. 860   ND=ND+1
  79. 870   D(I)=VAL(D$)
  80. 880   J=J+1
  81. 890   IF J=16 THEN J=6
  82. 900 NEXT I
  83. 910 RETURN
  84. 920 REM -----------------------
  85. 930 N$=   "PLOT DATA ROUTINE"
  86. 940 REM -----------------------
  87. 950 Q2$="INPUT OR REDUCED OR BOTH"
  88. 955 Q3$="DATA (I OR R OR B)"
  89. 960 GOSUB 5000
  90. 970 GOSUB 5400
  91. 980 IF CH$ ="I" OR CH$ ="R" OR CH$="B" THEN 990 ELSE 970
  92. 990 Q1$="" : Q2$=""
  93. 1000 Q3$="CHOOSE MAX SCALE : "
  94. 1010 GOSUB 5000 : INPUT MX
  95. 1020 Q3$="CHOOSE MIN SCALE : "
  96. 1030 GOSUB 5000 : INPUT MN
  97. 1040 GOSUB 270
  98. 1050 ERF=0
  99. 1060 GOSUB 470
  100. 1070 IF ERF <>1 THEN 1110
  101. 1080 Q1$="DATA OUT OF RANGE"
  102. 1090 Q2$="PLEASE RESPECIFY" :BEEP
  103. 1100 GOTO 1000
  104. 1110 LOCATE 24,1
  105. 1120 PRINT "STRIKE ANY KEY TO CONTINUE";
  106. 1130 CH$=INKEY$ :IF CH$="" THEN 1130 ELSE RETURN
  107. 1140 REM ---------------------
  108. 1150 N$=  "MEAN AND STANDARD DEVIATION"
  109. 1160 REM -------------------------------
  110. 1170 GOSUB 6200
  111. 1180 REM COMPUTE THE MEAN
  112. 1190 ME=0
  113. 1200 FOR I = 1 TO ND
  114. 1210     ME=ME+D(I)
  115. 1220 NEXT I
  116. 1230 ME=ME/ND
  117. 1240 REM COMPUTE STANDARD DEVIATION
  118. 1250 SD=0
  119. 1260 FOR I=1 TO ND
  120. 1270    SD=SD+(D(I)-ME)^2
  121. 1280 NEXT I
  122. 1290 SD=(SD/ND)^.5
  123. 1300 PRINT "MEAN OF INPUT DATA";TAB(20);
  124. 1310 PRINT USING "######,.##"; ME
  125. 1320 PRINT "STANDARD DEVIATION";TAB(20);
  126. 1330 PRINT USING "######,.##";SD
  127. 1340 GOSUB 7400
  128. 1350 RETURN
  129. 1360 REM ---------------------------------
  130. 1370 N$=  "3-POINT MOVING AVERAGE"
  131. 1380 REM ---------------------------------
  132. 1390 GOSUB 6200
  133. 1400 REM SET UP THE RESULT IN R(I)
  134. 1410 R(1)=0 : R(2)=0 : R(3)=0
  135. 1420 FOR I = 4 TO ND
  136. 1430   R(I)=(D(I-3)+D(I-2)+D(I-1))/3
  137. 1440 NEXT I
  138. 1450 Q1$="DO YOU WANT TO PRINT THE "
  139. 1460 Q2$="DATA  (Y OR N)"
  140. 1470 Q3$="" : GOSUB 5000
  141. 1480 GOSUB 7800
  142. 1490 IF YN$="N" THEN RETURN
  143. 1500 CLS
  144. 1510 FOR I = 4 TO ND
  145. 1520   PRINT R(I),
  146. 1530 NEXT I
  147. 1540 GOSUB 7400
  148. 1550 RETURN
  149. 1560 REM -----------------------------------
  150. 1570 N$=  "3-PT. WEIGHTED MOVING AVERAGE"
  151. 1580 REM -----------------------------------
  152. 1590 GOSUB 6200
  153. 1600 REM SET UP THE RESULT IN R(I)
  154. 1610 R(1)=0 : R(2)=0 : R(3)=0
  155. 1620 FOR I = 4 TO ND
  156. 1630   R(I)=(D(I-3)+2*D(I-2)+3*D(I-1))/6
  157. 1640 NEXT I
  158. 1650 Q1$="DO YOU WANT TO PRINT THE"
  159. 1660 Q2$="DATA  (Y OR N)"
  160. 1670 Q3$="" : GOSUB 5000
  161. 1680 GOSUB 7800
  162. 1690 IF YN$="N" THEN RETURN
  163. 1700 CLS
  164. 1710 FOR I = 4 TO ND
  165. 1720   PRINT R(I),
  166. 1730 NEXT I
  167. 1740 GOSUB 7400
  168. 1750 RETURN
  169. 1760 REM -------------------------------
  170. 1770 N$=  "4-PT. CENTERED AVERAGE"
  171. 1780 REM -------------------------------
  172. 1790 GOSUB 6200
  173. 1800 REM SET UP THE RESULT IN R(I)
  174. 1810 R(1)=0 : R(2)=0 : R(3)=0 : R(4)=0 : R(5)=0
  175. 1820 FOR I = 6 TO ND
  176. 1830   R(I)=(D(I-5)+2*(D(I-4)+D(I-3)+D(I-2))+D(I-1))/8
  177. 1840 NEXT I
  178. 1850 Q1$="DO YOU WANT TO PRINT THE "
  179. 1860 Q2$="DATA  (Y OR N)"
  180. 1870 Q3$="" : GOSUB 5000
  181. 1880 GOSUB 7800
  182. 1890 IF YN$="N" THEN RETURN
  183. 1900 CLS
  184. 1910 FOR I = 4 TO ND
  185. 1920   PRINT R(I),
  186. 1930 NEXT I
  187. 1940 GOSUB 7400
  188. 1950 RETURN
  189. 1960 REM -----------------------------
  190. 1970 N$=     "LINEAR REGRESSION"
  191. 1980 REM -----------------------------
  192. 1990 GOSUB 6200
  193. 2000 SX=0 : SY=0 : SXY=0 : SX2=0
  194. 2010 FOR I = 1 TO ND
  195. 2020   SX=SX+I
  196. 2030   SY=SY+D(I)
  197. 2040   SXY=SXY+D(I)*I
  198. 2050   SX2=SX2+I^2
  199. 2060 NEXT I
  200. 2070 M=(SXY-SX*SY/ND)/(SX2-SX^2/ND)
  201. 2080 B=SY/ND-M*SX/ND
  202. 2090 PRINT "    Y=";M;"X + " ;B
  203. 2100 REM UPDATE RESULT ARRAY
  204. 2110 FOR I= 1 TO ND
  205. 2120   R(I)=B+M*I
  206. 2130 NEXT I
  207. 2140 GOSUB 7400
  208. 2150 RETURN
  209. 3000 REM
  210. 3020 OPEN F$ FOR APPEND AS #1
  211. 3030 K=1  : GOSUB 6200
  212. 3040 Q1$="ENTER DATA"
  213. 3050 Q2$=""
  214. 3060 FOR L= 1 TO NF
  215. 3070   Q3$=F$(L) : GOSUB 5800
  216. 3080 NEXT L
  217. 3090 WRITE#1,P$(1),P$(2),P$(3),P$(4),P$(5),P$(6),P$(7),P$(8)
  218. 3100 REM SEE IF MORE RECORDS TO BE ADDED
  219. 3110 Q1$="ADD ANOTHER RECORD ? "
  220. 3120 Q2$="" :Q3$="YES OR NO"
  221. 3130 GOSUB 5000
  222. 3140 GOSUB 7800
  223. 3150 IF YN$="Y" GOTO 3030
  224. 3160 CLOSE : RETURN
  225. 3400 REM     "ANOTH"
  226. 3420 Q1$="WOULD YOU LIKE TO "
  227. 3430 Q3$="AGAIN Y OR N ?"
  228. 3440 GOSUB 5000
  229. 3450 GOSUB 7800
  230. 3460 RETURN
  231. 3800 REM     "BACKFIL"
  232. 3820 OPEN F$ FOR INPUT AS #1
  233. 3830 OPEN FB$ FOR OUTPUT AS #2
  234. 3840 'READ A RECORD, THEN WRITE IT
  235. 3850 FOR I= 1 TO 4000
  236. 3860   IF EOF(1) THEN GOTO 3900
  237. 3870   INPUT#1,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  238. 3880   WRITE#2,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  239. 3890 NEXT I
  240. 3900 CLOSE
  241. 3910 RETURN
  242. 4600 REM   "DELREC"
  243. 4620 N$="DELETE RECORD"  : GOSUB 6200
  244. 4630 Q1$="NUMBER OF RECORD TO DELETE"
  245. 4640 Q2$="" :Q3$=""
  246. 4650 GOSUB 5000
  247. 4660 INPUT L
  248. 4670 GOSUB 3800
  249. 4680 OPEN FB$ FOR INPUT AS #1
  250. 4690 OPEN F$ FOR OUTPUT AS #2
  251. 4700 FOR I = 1 TO L-1
  252. 4710   IF EOF(1) THEN GOTO 4860
  253. 4720   INPUT#1,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  254. 4730   WRITE#2,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  255. 4740 NEXT I
  256. 4750 REM READ BUT DONT WRITE RECORD TO DELETE
  257. 4760   INPUT#1,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  258. 4770 REM READ AND WRITE TILL END OF FILE
  259. 4780 FOR I= 1 TO 4000
  260. 4790   IF EOF(1) THEN GOTO 4840
  261. 4800   INPUT#1,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  262. 4810   WRITE#2,P1$,P2$,P3$,P4$,P5$,P6$,P7$,P8$
  263. 4820 NEXT I
  264. 4830 REM NORMAL RETURN
  265. 4840 CLOSE  : RETURN
  266. 4850 REM ERROR RETURN
  267. 4860 CLOSE
  268. 4870 L=-1
  269. 4880 RETURN
  270. 5000 REM      "DIALOG"
  271. 5020 FOR I= 20 TO 23
  272. 5030 LOCATE I,1
  273. 5040 IF I>20 THEN 5080
  274. 5050   FOR J= 1 TO 40
  275. 5060     PRINT "-";
  276. 5070  NEXT J
  277. 5080 IF I = 21 THEN PRINT Q1$; 'FIRST QUESTION
  278. 5090 IF I = 22 THEN PRINT Q2$
  279. 5100 IF I = 23 THEN PRINT Q3$;
  280. 5110 CP1=POS(N)
  281. 5120 CP=POS(N)
  282. 5130 IF CP>40 THEN 5150
  283. 5140 PRINT " "; : GOTO 5120
  284. 5149 REM RESTORE CURSOR FOR USER RESPONSE
  285. 5150 LOCATE I,CP1
  286. 5160 NEXT I
  287. 5170 RETURN
  288. 5400 REM     "INCH"
  289. 5420 REM WAIT FOR INPUT CHARACTER
  290. 5430 CH$= INKEY$ : IF CH$="" THEN 5430
  291. 5440 Z=ASC(CH$)
  292. 5450 IF Z < 97 OR Z > 122 THEN 5470
  293. 5460 Z=Z-32
  294. 5470 CH$=CHR$(Z)
  295. 5480 RETURN
  296. 5800 REM      "INDAT"
  297. 5820 GOSUB 5000
  298. 5830 INPUT P$(K)
  299. 5840 REM ECHO QUESTION AND ANSWER
  300. 5850 LOCATE K+2,3
  301. 5860 PRINT Q3$;TAB(25);P$(K)
  302. 5870 K=K+1
  303. 5880 RETURN
  304. 6200 REM     "INIT"
  305. 6220 CLS
  306. 6230 PRINT N$    : PRINT
  307. 6240 KEY OFF
  308. 6250 RETURN
  309. 6600 REM     "INPAR"
  310. 6620 GOSUB 5000
  311. 6630 INPUT PAR(K)
  312. 6640 REM ECHO QUESTION AND ANSWER
  313. 6650 LOCATE K+2,3
  314. 6660 PRINT Q3$; TAB(24);
  315. 6670 PRINT USING "######,.##"; PAR(K)
  316. 6680 K=K+1
  317. 6690 RETURN
  318. 7000 REM     "MENU"
  319. 7020 CLS
  320. 7030 FOR I= 1 TO N
  321. 7040   IF I=10 THEN PRINT 0; ELSE PRINT I;
  322. 7050    PRINT  "= " ; X$(I)
  323. 7060 NEXT I
  324. 7070 Q1$="" : Q2$=""
  325. 7080 Q3$="CHOOSE PROGRAM :"
  326. 7090 GOSUB 5000
  327. 7100 GOSUB 5400
  328. 7110 X= VAL(CH$)
  329. 7119 REM SEE IF CHAR IN RANGE
  330. 7120 IF X>=1 AND X<=N THEN RETURN
  331. 7130 IF X=0 AND N=10 THEN 7140 ELSE 7150
  332. 7140 X=10 : RETURN
  333. 7150 Q1$="ILLEGAL CHOICE, CHOOSE AGAIN"
  334. 7160 GOSUB 5000
  335. 7170 GOTO 7100
  336. 7400 REM    "PAUSE"
  337. 7420 Q1$="STRIKE ANY KEY TO CONTINUE"
  338. 7430 Q2$="" : Q3$=""
  339. 7440 GOSUB 5000
  340. 7450 X$=INKEY$ : IF X$ = "" THEN 7450
  341. 7460 RETURN
  342. 7800 REM    "YESNO"
  343. 7820 REM WAIT FOR KEY TO BE STRUCK
  344. 7830 YN$=INKEY$ : IF YN$="" THEN 7830
  345. 7840 IF YN$="y" THEN YN$="Y"
  346. 7850 IF YN$="n" THEN YN$="N"
  347. 7860 IF YN$ = "Y" OR YN$ = "N" THEN 7890
  348. 7870 REM NOT YES OR NO TRY AGAIN
  349. 7880 GOTO 7830
  350. 7890 PRINT YN$  :  RETURN
  351.